package AgentesConfig;


import jade.wrapper.AgentController;
import jade.wrapper.ContainerController;
import jade.wrapper.StaleProxyException;

import java.io.File;
import java.util.ArrayList;
import java.util.List;





@SuppressWarnings("serial")
public class AgenteInit extends jade.core.Agent {

	private static String caminhoIni = "config";
	private static String caminhoFornecedores = "/fornecedores";


	public void setup() {

		// Iniciar o Juri
		createAgent("Juri","AgentesConcurso.SubmeterConcurso",null,null);

		// Carregar e Registar Empresas
		load_res_fornecedores();

		//Carregar e Registar Classificadores
		load_res_classificadores();
	}





	private void createAgent(String agentName, String agentClassName, String containerName, String arg) {
		ContainerController cc;
		AgentController ac;
		Object[] args_list = new String[1];
		args_list[0] = arg;

		cc = getContainerController();
		try {
			ac = cc.createNewAgent(agentName, agentClassName, args_list);
			ac.start();
		} catch (StaleProxyException e) {
			e.printStackTrace();
		}

	}

	private List<String> listar_ficheiros(String caminho) 
	{

		//Directory path here
		String path = caminho; 

		String files;
		File folder = new File(path);
		File[] listOfFiles = folder.listFiles(); 
		List<String> configList = new ArrayList<String>();

		for (int i = 0; i < listOfFiles.length; i++) 
		{

			if (listOfFiles[i].isFile()) 
			{
				files = listOfFiles[i].getName();
				if (files.toLowerCase().endsWith(".ini"))
				{
					configList.add(files);
				}
			}
		}

		return configList;
	}


	public void load_res_fornecedores () {

		List<String> todos_fornecedores = listar_ficheiros(caminhoIni+caminhoFornecedores);
		int num = 0;

		while(num<todos_fornecedores.size()) {	
			createAgent(todos_fornecedores.get(num).replace(".ini", ""),"AgentesFornecedores.AgenteFornecedor",null,caminhoIni + caminhoFornecedores + "/" + todos_fornecedores.get(num));
			num++;
		}
	}


	public void load_res_classificadores() {

		createAgent("AgenteTesteVeiculos","AgentesClassificadores.AgenteTesteVeiculos",null,null);
		createAgent("AgenciaRating","AgentesClassificadores.AgenciaRating",null,null);
		createAgent("AgenteClassificadorFornecedor","AgentesClassificadores.AgenteClassificadorFornecedor",null,null);		
	}


}